RFC 9293 - Transmission Control Protocol (TCP)
RFC 9293 - Transmission Control Protocol (TCP)
TCPプロトコルのRFC
RFC 793 - Transmission Control Protocolは昔のやつ
code:memo
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A|P|R|S|F| |
| Offset| Rsrvd |W|C|R|C|S|S|Y|I| Window |
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :
: Data :
: |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Note that one tick mark represents one bit position.
Figure 1: TCP Header Format
TCPヘッダ
Source Port(送信元ポート番号): 16 bits
Destination Port(宛先ポート番号): 16 bits
Sequence Number(シーケンス番号): 32 bits
Acknowledgment Number(確認応答番号): 32 bits
Data Offset (DOffset、データオフセット): 4 bits
データがどこから始まるか
Reserved (Rsrvd、予約): 4 bits
Control bits(制御ビット)
CWR(Congestion Window Reduced): 1 bit
ECE(ECN-Echo): 1 bit
RFC 3168 - The Addition of Explicit Congestion Notification (ECN) to IP
URG(Urgent pointer): 1 bit
ACK(Acknowledgement): 1 bit
PSH(Push): 1 bit
RST(Reset): 1 bit
SYN(Synchronize): 1 bit
FIN(Finish): 1 bit
Window(ウィンドウ): 16 bits
Checksum(チェックサム): 16 bits
Urgent Pointer(緊急ポインタ): 16 bits
Obsoletes
RFC 793
RFC 879
RFC 2873
RFC 6093
RFC 6429
RFC 6528
RFC 6691
RFC 1011 OFFICIAL INTERNET PROTOCOLS
RFC 1122 - Requirements for Internet Hosts -- Communication Layers
RFC 5861: HTTP Cache-Control Extensions for Stale Content
code:mermaid
stateDiagram-v2
CLOSED --> LISTEN: passive OPEN<br>------<br>create TCB
LISTEN --> CLOSED: CLOSE<br>------<br>delete TCB
CLOSED --> SYN_SENT: active OPEN<br>------<br>create TCB<br>snd SYN
SYN_SENT --> CLOSED: CLOSE<br>------<br>delete TCB
LISTEN --> SYN_SENT: SEND<br>------<br>snd SYN
LISTEN --> SYN_RCVD: rcv SYN<br>------<br>snd SYN, ACK
SYN_RCVD --> LISTEN: rcv RST (note 1)
SYN_SENT --> SYN_RCVD: rcv SYN<br>------<br>snd SYN, ACK
SYN_RCVD --> FINWAIT_1: CLOSE<br>------<br>snd FIN
SYN_RCVD --> ESTAB: rcv ACK of SYN<br>------<br>x
SYN_SENT --> ESTAB: rcv ACK, SYN<br>------<br>snd ACK
ESTAB --> FINWAIT_1: CLOSE<br>------<br>snd FIN
ESTAB --> CLOSE_WAIT: rcv FIN<br>------<br>snd ACK
FINWAIT_1 --> FINWAIT_2: rcv ACK of FIN<br>------<br>x
FINWAIT_1 --> CLOSING: rcv FIN<br>------<br>snd ACK
FINWAIT_2 --> TIME_WAIT: rcv FIN<br>------<br>snd ACK
CLOSING --> TIME_WAIT: rcv ACK of FIN<br>------<br>x
CLOSE_WAIT --> LAST_ACK: CLOSE<br>------<br>snd FIN
LAST_ACK --> CLOSED: rcv ACK of FIN<br>------<br>x
TIME_WAIT --> CLOSED: Timeout=2MSL<br>------<br>delete TCB
TCB( Transmission Control Block)
TCP接続ごとの状態管理構造体
制御フラグ系(パケット)
TCPヘッダのフラグビット
SYN(Synchronize)
初期シーケンス番号の同期
接続開始(3-way handshake)
ACK(Acknowledgment)
受信確認
ack番号が有効であることを示す
FIN(Finish)
送信終了(片方向のクローズ)
RST(Reset)
接続の強制リセット
状態破棄(異常系)
確認用
Q. RFC 9293
#RFC